﻿/**
  *@brief 本例分别使用了工厂方式，继承方式实现对象的反射创建
  *
  * 其中TestFactory是工厂方式；TestInherit是继承方式，这类似
  * QT的metaobject机制。
  * 作者更倾向于工厂方式，整体代码看起来，逻辑不复杂。
  *
  *@author goko-712@163.com
  *@date 2018-11-07
  *@version v0.9
*/
#include "test.h"

int main()
{
    // 用工厂方式，反射创建对象
    REGISTER_CLASS_FACTORY(TestFactory)
    void* vObj = ObjectFactory.MakeObject("TestFactory");
    if(!vObj)
    {
        std::cout << "get instnce Test err;" << std::endl;
        return 0;
    }
    TestFactory *tf = static_cast<TestFactory*>(vObj);
    tf->print();
    delete tf;


    // 用继承基类方式，反射创建对象
    Object *tObj = Object::MakeObject("TestInherit");
    if(!tObj)
    {
        std::cout << "get instnce Test err;" << std::endl;
        return 0;
    }
    TestInherit *ti = dynamic_cast<TestInherit*>(tObj);
    ti->print();
    delete tObj;


    return 0;
}
